/*************************************************
filename	: system_interface.h
author		: Stefan lulham
desc		: Contains the base system interface
*************************************************/
#ifndef D_SYSTEM_INTERFACE_H
#define D_SYSTEM_INTERFACE_H

#include <vector>
#include <algorithm>
#include <modules\interface.h>
#include <modules\system\system_window.h>
#include <modules\system\system_timer.h>
#include <modules\system\system_enums.h>
#include <modules\system\system_videoMode.h>

#undef CreateWindow

using namespace std;

namespace DelGE
{
	namespace Modules
	{
		namespace System
		{
			class SystemInterface : public Interface
			{
			public:
				SystemInterface();
				virtual ~SystemInterface();

				SystemWindow* CreateWindow(string sTitle, int iWidth, int iHeight, DelGESystemWindowStyle eStyle = DelGESystemWindowStyle_FixedSize);
				SystemTimer* CreateTimer();

				virtual void Update() = 0;

				virtual vector<SystemVideoMode> GetSupportedVideoModes() = 0;
				virtual SystemVideoMode GetCurrentVideoMode() = 0;
				bool IsVideoModeSupported(const SystemVideoMode &systemVideoMode);
				virtual void ChangeVideoMode(const SystemVideoMode &systemVideoMode) = 0;
				virtual void RestoreVideoMode() = 0;
				SystemVideoMode FindNearestSupportedVideoMode(const SystemVideoMode &systemVideoMode);

				virtual void HideMouse() = 0;
				virtual void ShowMouse() = 0;
			};
		}
	}
}

#endif